Cinemática III

Hasta el momento hemos usado solamente numeros para representar las transformaciones que describen la cinematica de los manipuladores, pero dentro del ambiente de IPython tenemos una libreria que nos va a ayudar mucho cuando queremos calcular una formula general.

Sympy

La libreria de sympy nos ofrece herramientas de calculo analitico y numerico para analisis simbolico (por lo general nos referimos a el simplemente como calculo simbolico). Lo primero que tenemos que hacer es inicializar las funciones de sympy que vamos a necesitar.


In [ ]:
# Importa la función para imprimir LaTeX en el notebook de IPython
from sympy.interactive import printing
printing.init_printing()
# Importamos funciones utiles para algebra
from sympy import var, simplify, collect, expand, solve, sin, cos, Matrix

Y ahora podemos inicializar las variables que vamos a ocupar, esto lo hacemos asi:


In [ ]:
var("x y z")

Podemos representar cualquier tipo de expresión que queramos:


In [ ]:
x**2 + sin(y) + 3*x + 1

Incluso resolver algunas formulas con algebra o trigonometria:


In [ ]:
solve(x**2 + 2*x + 1, x)

In [ ]:
solve(sin(y) + cos(y), y)

Podemos guardar estas expresiones en variables, y estas variables van a tener metodos especiales, como por ejemplo la derivada.


In [ ]:
f = sin(x) + x

In [ ]:
f.diff(x)

Y tambien podemos representar matrices.


In [ ]:
Rz = Matrix([[cos(x), -sin(x), 0, 0],
             [sin(x),  cos(x), 0, 0],
             [     0,       0, 1, 0],
             [     0,       0, 0, 1]])
Rz

y usarla para operaciones:


In [ ]:
Rz*Rz

Nuestras funciones de Python, tambien nos pueden regresar objetos de sympy:


In [ ]:
def rotacionz(theta):
    '''
    Esta función devuelve una matriz de rotación con respecto al eje z
    con una magnitud de theta.
    
    Uso:
    
    >>> rotacionz(y)
    Matrix([
    [cos(y), -sin(y), 0, 0],
    [sin(y),  cos(y), 0, 0],
    [     0,       0, 1, 0],
    [     0,       0, 0, 1]])
    '''
    Rz = Matrix([[cos(theta), -sin(theta), 0, 0],
                 [sin(theta),  cos(theta), 0, 0],
                 [         0,           0, 1, 0],
                 [         0,           0, 0, 1]])
    return Rz

In [ ]:
var("q_1")
rotacionz(q_1)

Ejercicios

  1. Implemente el codigo necesario para tener funciones que describan las rotaciones en $x$ y en $y$ y las traslaciones en $x$, $y$ y $z$.
  2. Implemente una función que nos devuelva la transformación homogenea de un manipulador PUMA.